nginx的负载均衡和反向代理

        之前提到过的 nginx 的负载均衡功能,实际上和 nginx 的代理是同一个功能,只是把之前代理一台机器改为代理多台机器而已。 nginx 的负载均衡和 lvs 相比, nginx 属于更该机的应用层,不牵扯到 IP 和内核的改动, 它只是单纯地把用户的请求转发到后面的机器上,这就意味着,后端的 RS 不需要配置公网 IP。

1.环境说明

  • nginx 分发器(一个公网 ip 192.168.119.110 和一个内网 ip 192.168.0.67)
  • RS1 只有内网 ip(192.168.0.66)
  • RS2 只有内网 ip(192.168.0.65)

2.配置

        在 nginx 分发器上编辑配置文件

1
[root@dir ~]# vim /usr/local/nginx/conf/vhosts/lb.conf

        加入内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
upstream test {
ip_hash;
server 192.168.0.66;
server 192.168.0.65;
}
server {
listen 80;
server_name bbs.aaa.cn;
location / {
proxy_pass http://test/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

        说明:这个配置和 nginx 代理配置如出一辙,只是多了一个 upstream ,这个 upstream 用来定义后端的 RS ,可以只写一个。 ip_hash 为 nginx 的一种调度算法,加上这一行会达到这样的效果,即一个用户的请求会适中被分发到固定的一个 RS 上。这样的好处是,可以避免同一个用户的请求分发到不同的机器上而导致 session 丢失的情况。 upstream 里面,RS 后面的 ip 后面还可以加权重,比如 “server 192.168.0.66 weight=100;”。还有一点要注意, upstream 后面的 test 是自定义的一个名字,可以随便写,唯一的要求是要和 proxy_pass 后面保持一致。

        针对目录参考nginx代理–根据访问的目录来区分后端的web